export const voTreeToRowList: (data: AuthorityVo[], extraAttr: ExtraAttr) => AuthorityRow[] = (data, extraAttr) => {
	addAttrs(data, extraAttr)
	const array = treeToArray(data)
	array.forEach((row, index) => {
		Reflect.set(row, '_index', index)
	})
	return array
}

export const addAttrs: (data: AuthorityVo[], extraAttr: ExtraAttr) => void = (data, extraAttr) => {
	data.forEach(item => {
		Reflect.set(item, '_parent', extraAttr._parent ?? undefined)
		Reflect.set(item, '_level', extraAttr._level ?? 0)
		Reflect.set(item, '_show', undefined)
		Reflect.set(item, '_checked', false)
		Reflect.set(item, '_indeterminate', false)
		if (item.children && item.children.length > 0) {
			Reflect.set(item, '_expand', extraAttr._expand ?? false)
			addAttrs(item.children, {
				_parent: <AuthorityRow>item,
				_level: (extraAttr._level ?? 0) + 1,
				_expand: extraAttr._expand ?? false
			})
		} else {
			Reflect.set(item, '_expand', true)
		}
	})
}

export function treeToArray(data: AuthorityRow[]) {
	let result: AuthorityRow[] = []
	data.forEach(item => {
		result.push(<AuthorityRow>item)
		if (item.children && item.children.length > 0) {
			const res = treeToArray(item.children)
			result = result.concat(res)
		}
	})
	return result
}
